gdk/wayland: Always get the seat's key modifiers from the GdkKeymap
authorRui Matos <tiagomatos@gmail.com>
Wed, 11 Jan 2017 18:12:12 +0000 (19:12 +0100)
committerBastien Nocera <hadess@hadess.net>
Tue, 17 Jan 2017 17:24:28 +0000 (18:24 +0100)
Elsewhere we already go through the keymap to get modifiers so we
should do the same here. In fact, this was relying on xkb modifier
mask values being bitwise compatible with GdkModifierType which isn't
necessarily true.

https://bugzilla.gnome.org/show_bug.cgi?id=770112

gdk/wayland/gdkdevice-wayland.c

index 45483af70592f373b6ee2bfdcf55a4c6a611266a..4e605bdbf2a0addff64beb48b57036c487e28e91 100644 (file)
@@ -2233,10 +2233,11 @@ keyboard_handle_modifiers (void               *data,
   keymap = seat->keymap;
   direction = gdk_keymap_get_direction (keymap);
   xkb_state = _gdk_wayland_keymap_get_xkb_state (keymap);
-  seat->key_modifiers = mods_depressed | mods_latched | mods_locked;
 
   xkb_state_update_mask (xkb_state, mods_depressed, mods_latched, mods_locked, group, 0, 0);
 
+  seat->key_modifiers = gdk_keymap_get_modifier_state (keymap);
+
   g_signal_emit_by_name (keymap, "state-changed");
   if (direction != gdk_keymap_get_direction (keymap))
     g_signal_emit_by_name (keymap, "direction-changed");